java list.add(map)时,为什么后面添加的会覆盖前面的?

public static void main (String[] args){
List list = new ArrayList();
Map map = new HashMap();
for(int i = 0 ; i < 10 ; i++){
map.put("a", i);
list.add(i,map);
}
for(int j = 0 ; j < list.size(); j++){
System.out.println(list.get(j));
}
}

得到的是9,而不是期望的0,1,2,3,4,5,6,7,8,9;请问是什么原因?

发表者:{fangf666}fangf666 8-28 [ 1]

 分享到:
 
 
回答(第1条,共1条,通过审核的共1条)
  map的存放是无序的,它存放的是键值对,也就是一个键对应一个值,如果该键已经存在(“a”)那么后来的值会替换掉当前的键所指向的值。这些可以去看下map的API。你当前只生成了一个对象,一个引用也就是map。所以值总是被后来所取代的。
  而list是有序的,可以想象成一个数组,它允许重复值得出现,也就是说list.add(1),list.add(1)在这个list中是存在两个值的。
  当你将new Map置于循环之内时,你生成了4个map对象,每个map对象都有自己的 "a"键,并且这些map存放到list中,这样你可以得到你想要的结果。

回答评级:★★★☆☆☆☆☆☆ 回答者:{tatata}tatata 8-30

回答
相关问题:
我是:
本站注册用户
用户名: 密码:
非本站注册用户
我来回答:

回答字数在8000字以内。回答即可得2分,回答被采用后,根据评级可得到相应的积分和智慧果。
比如:回答评级为5,可得150分和15个智慧果。

 

 
 
 
 
 
 
































 

© 版权所有  2001-2024 知识网站
Copyright (C) 2001-2024 allzhishi.com All rights reserved
联系我们 — 电话:15973023232  微信:zhishizaixian  ICP备案号:湘ICP备08003211号-4